#include "head.h"

void login(int socket_fd){
    //验证登录
    int count_error = 0;
    while(1){
        //存储用户名和密码hash值
        char username[20] = {0};
        char password[50] = {0};

        //printf("-----LOG IN-----\n");    // 登陆界面
        printf("username : ");
        scanf("%s", username);
        printf("password : ");
        scanf("%s", password);
        
        // 通知服务器
        // send 0；
        
        //客户端发送用户名和密码到服务端
        send(socket_fd, username, sizeof(username), MSG_NOSIGNAL);
        send(socket_fd, password, sizeof(password), MSG_NOSIGNAL);

        //接收服务端发回的标记判断能否登录
        int flag_login;
        recv(socket_fd, &flag_login, sizeof(int), MSG_WAITALL);
        if(flag_login == 0){
            printf("登录成功！\n");
            break;
        }
        else if(flag_login == 1){
            printf("没有该用户，清注册！\n");
            // 注册逻辑
            enroll(socket_fd);
            continue;
        }
        else if(flag_login == 2){
            printf("密码错误！\n");
            count_error += 1;
        }
        if(count_error == 3){
            printf("连续三次输入密码错误！拒绝访问！\n");
            close(socket_fd);
            exit(1);
        }
    }
}

// 注册
int enroll(int socket_fd){
    while(1){
        char new_name[20] = {0};
        char new_passwd[50] = {0};
        char info_buf[50] = {0};
        printf("请输入用户名：");
        scanf("%s", new_name);
        printf("请输入密码：");
        scanf("%s", new_passwd);

        send(socket_fd, new_name, sizeof(new_name), MSG_NOSIGNAL);
        send(socket_fd, new_passwd, sizeof(new_passwd), MSG_NOSIGNAL);

        recv(socket_fd, info_buf, sizeof(info_buf), 0);
        if (strcmp(info_buf, "该用户已存在！") == 0){ // 重新输入
            printf("该用户已存在，请重新输入！\n");
            continue;
        }else if(strcmp(info_buf, "注册成功！") == 0){
            printf("注册成功！\n");
            break;
        }
    }
    printf("请重新登陆\n");
    return 0;
}

// 子线程登陆（测试用）
int pthread_login(int socket_fd){
    //验证登录
    int count_error = 0;
    while(1){

        printf("login send\n");
        //客户端发送用户名和密码到服务端
        send(socket_fd, "smile", strlen("smile"), MSG_NOSIGNAL);
        send(socket_fd, "999", strlen("999"), MSG_NOSIGNAL);

        //接收服务端发回的标记判断能否登录
        int flag_login;
        recv(socket_fd, &flag_login, sizeof(int), MSG_WAITALL);
        
        printf("flag_login = %d\n", flag_login);

        if(flag_login == 0){
            printf("登录成功！\n");
            break;
        }
        else if(flag_login == 1){
            printf("没有该用户，清注册！\n");
            // 注册逻辑
            enroll(socket_fd);
            continue;
        }
        else if(flag_login == 2){
            printf("密码错误！\n");
            count_error += 1;
        }
        if(count_error == 3){
            printf("连续三次输入密码错误！拒绝访问！\n");
            close(socket_fd);
            exit(1);
        }
    }

    return 0;
}